home *** CD-ROM | disk | FTP | other *** search
- ;
- ; $VER: ReadDevice.a 37.1 (1998.07.20) by Mauro Panigada
- ;
- ; Requirements: os2.1 (#37), 68020+
- ; Purpose: replace ReadDevice by ...
- ; Note: PURE
- ;
- ; Usage: ReadDevice DEVICE/A
- ;
-
- incdir "inc:"
- include "exec/types.i"
- include "exec/libraries.i"
- include "exec/memory.i"
- include "exec/exec_lib.i"
- include "dos/dos.i"
- include "dos/filehandler.i"
- include "dos/dosextens.i"
- include "dos/dos_lib.i"
-
-
- CALL MACRO
- jsr (_LVO\1,a6)
- ENDM
-
- EXECBASE MACRO
- move.l (4).w,a6
- ENDM
-
- STRUCTURE internal,0
- LONG dosbase
-
- LABEL array
- LONG device
-
- STRUCT arguments,33*4
-
- LABEL s_sizeof
-
-
- opt p=68020
-
-
- LIBVERSION EQU 37
-
-
- SECTION main,CODE
-
- bra.s start
-
- dc.b "$VER: ReadDevice 37.1 [020+] (1998.07.20) by Mauro Panigada"
- dc.b 13,10,0
- even
-
- start
- EXECBASE
- move.l #s_sizeof,d0
- move.l #MEMF_ANY|MEMF_CLEAR,d1
- CALL AllocMem
- move.l d0,a5
- beq exit00
-
- lea (dosname,pc),a1
- moveq #LIBVERSION,d0
- CALL OpenLibrary
- move.l d0,(a5)
- beq exit01
-
- move.l d0,a6
- lea (template,pc),a0
- move.l a0,d1
- move.l a5,d2
- addq.l #array,d2
- moveq #0,d3
- CALL ReadArgs
- move.l d0,d7 ; d7=readargs
- beq exit02err
-
- *move.l (device,a5),d1
- *moveq #SHARED_LOCK,d2
- *CALL Lock
- *move.l d0,d6 ; d6=lock
- *beq exit03err
- *lea (devinfo,a5),a0
- *move.l a0,a4
- *move.l a0,d2
- *move.l d0,d1
- *CALL Info
- *tst.l d0
- *beq exit04err
- *move.l (id_VolumeNode,a4),d0
- *lsl.l #2,d0
-
- moveq #LDF_DEVICES|LDF_READ,d1
- CALL LockDosList
- move.l d0,d1
- move.l (device,a5),d2
- moveq #LDF_DEVICES,d3
- CALL FindDosEntry
- tst.l d0
- beq exit03err
-
- move.l d0,a4 ;a4=dvi
-
- move.l (dvi_Startup,a4),a0
- adda.l a0,a0
- adda.l a0,a0
- move.l (fssm_Environ,a0),a2
- adda.l a2,a2
- adda.l a2,a2 a2=startup
-
- lea (arguments,a5),a3
- move.l a3,d2
- move.l (dvi_Name,a4),(a3)+
- move.l (dvi_Task,a4),(a3)+
- move.l (dvi_Handler,a4),(a3)+
- move.l (dvi_Stacksize,a4),(a3)+
- move.l (dvi_Priority,a4),(a3)+
- move.l (dvi_SegList,a4),d0
- lsl.l #2,d0
- move.l d0,(a3)+
- move.l (dvi_GlobVec,a4),d0
- *lsl.l #2,d0
- move.l d0,(a3)+
- move.l a0,(a3)+
-
- move.l a0,-(sp)
- lea (testone,pc),a0
- move.l a0,d1
- CALL VPrintf
- move.l (sp)+,a0
-
- tst.l a0
- beq.s nn1
-
- move.l a3,d2
- move.l (fssm_Device,a0),(a3)+
- move.l (fssm_Unit,a0),(a3)+
- move.l (fssm_Flags,a0),(a3)+
-
- lea (testone2,pc),a0
- move.l a0,d1
- CALL VPrintf
-
- nn0 tst.l a2
- beq.s nn1
-
- move.l a3,d2
- move.w #(DosEnvec_SIZEOF/4)-1,d0
- loop0 move.l (a2)+,(a3)+
- dbf d0,loop0
-
- lea (testone3,pc),a0
- move.l a0,d1
- CALL VPrintf
-
- nn1
- bsr unlockit
-
- exit99
-
- exit03
- move.l d7,d1
- CALL FreeArgs
-
- exit02
- move.l (a5),a1
- EXECBASE
- CALL CloseLibrary
-
- exit01
- move.l a5,a1
- move.l #s_sizeof,d0
- CALL FreeMem
-
- exit00
- rts
-
- exit02err
- pea (exit02,pc)
- bra.s exiterr
- exit03err
- pea (exit03,pc)
- bsr unlockit
- lea (messer,pc),a0
- move.l a0,d1
- lea (device,a5),a0
- move.l a0,d2
- jmp _LVOVPrintf(a6)
-
- exiterr
- CALL IoErr
- move.l d0,d1
- moveq #0,d2
- CALL PrintFault
- rts
-
- unlockit moveq #LDF_DEVICES|LDF_READ,d1
- CALL UnLockDosList
- rts
-
-
-
- ;===============================================================================
-
- dosname dc.b "dos.library",0
-
- testone
- dc.b " Name = %b",10
- dc.b " Task = 0x%lx",10
- dc.b " Handler = %b",10
- dc.b " Stacksize = %lu",10
- dc.b " Priority = %ld",10
- dc.b " SegList = 0x%lx",10
- dc.b " GlobalVec = 0x%lx",10
- dc.b " Startup = 0x%lx",10,0
- testone2
- dc.b "FileSysStartupMsg info:",10
- dc.b " Device = %b",10
- dc.b " Unit = %lu",10
- dc.b " Flags = 0x%lx",10,0
- testone3
- dc.b "DosEnvec info:",10
- dc.b " TableSize = %lu",10
- dc.b " Block Size = %lu",10
- dc.b " SecOrg = %lu",10
- dc.b " Number of Heads = %lu",10
- dc.b " Sectors per Block = %lu",10
- dc.b " Blocks per Track = %lu",10
- dc.b " Reserved blocks at start = %lu",10
- dc.b " Reserved blocks at end = %lu",10
- dc.b " Interleave = %lu",10
- dc.b " Low Cylinder = %lu",10
- dc.b " High Cylinder = %lu",10
- dc.b " Number of DOS Buffers = %lu",10
- dc.b " Buffer Memory Type = 0x%lx",10
- dc.b " MaxTransfer = %lu",10
- dc.b " Memory Write Mask = 0x%lx",10
- dc.b " Boot Priority = %ld",10
- dc.b " DOS Type = 0x%lx",10
- dc.b " Baud = %lu",10
- dc.b " Handler Control Word = 0x%lx",10
- dc.b " Number of BootBlocks = %lu",10
- dc.b 0
-
- template dc.b "DEVICE/A",0
-
- messer dc.b "Device %s not found.",10,0
-
-
- END